<?php
/**
 * TinyCatPHP 极简、快速、创新、易用、高性能的PHP应用开发框架
 * User: CnTaiGe <hst042@163.com>
 * Date: 2017/11/10
 */
/**
 * 获取配置内容
 * @param $key
 * @param $value
 * @return null
 */
function config($key, $value = null)
{
    if ($value !== null) {
        \TinyCatPHP\libs\config\Config::set($key, $value);
    }
    return \TinyCatPHP\libs\config\Config::get($key);
}

/**
 * 获取post过来的json格式数据
 * @return array|mixed
 */
function jsonData()
{
    return \TinyCatPHP\libs\handler\Request::jsonData();
}

/**
 * 记录日志信息
 * @param $level
 * @param $msg
 * @param bool $isRecordFileLine 是否记录文件,行数
 */
function logMsg($level, $msg, $isRecordFileLine = false)
{
    \TinyCatPHP\libs\utils\Log::record($level, $msg);
}

/**
 * 设置cookie
 * @param $key
 * @param null $value
 * @param int $expire 过期时间
 * @param string $prefix 前缀
 * @return mixed
 */
function cookie($key, $value = null, $expire = 0, $prefix = '')
{
    $key = $prefix . $key;
    if ($value === null && isset($_COOKIE[$key])) {
        return $_COOKIE[$key];
    }
    setcookie($key, $value, $expire);
    return null;
}

/**
 * 获取get参数
 * @param $key
 * @return null
 */
function get($key)
{
    return \TinyCatPHP\libs\handler\Request::requestGet($key);
}

/**
 * 获取post参数
 * @param $key
 * @return null
 */
function post($key)
{
    return \TinyCatPHP\libs\handler\Request::requestPost($key);
}

/**
 * session操作
 * @param $key
 * @param null $value
 * @param string $prefix 前缀
 * @return mixed
 */
function session($key, $value = null, $prefix = '')
{
    if ($key === null)
        session_destroy();
    if ($value === null && isset($_SESSION[$prefix . $key])) {
        return $_SESSION[$prefix . $key];
    }
    $_SESSION[$prefix . $key] = $value;
    return null;
}

/**
 * 执行过虑操作
 * @param $value
 */
function paramFilter(&$value)
{
    $fns = \TinyCatPHP\libs\config\Config::get('param_filter');
    if (empty($fns)) return;
    $fnsArr = explode(',', $fns);
    array_map(function ($r) use (&$value) {
        if (function_exists($r))
            $value = $r($value);
    }, $fnsArr);
}

/**
 * 输出模板
 * @param $path
 * @param $data
 * @return array
 */
function view($path, $data = [])
{
    $tmp = new \TinyCatPHP\libs\utils\ParseTemp(\TinyCatPHP\libs\config\Config::get('template_path') . '/' . $path, $data);
    return [
        'type' => 'file',
        'file' => $tmp->parse(),
        'data' => $data
    ];
}

/**
 * 输出json格式内容
 * @param $data
 * @return array
 */
function json($data)
{
    \TinyCatPHP\libs\handler\Response::contentType('application/json');
    return [
        'type' => 'json',
        'content' => json_encode($data, JSON_UNESCAPED_UNICODE)
    ];
}

/**
 * 数据库操作
 * @param $table
 * @return \TinyCatPHP\libs\db\DBInterface
 * @throws \TinyCatPHP\exception\SysException
 *
 */
function db($table)
{
    static $driveIns = [];
    $config = \TinyCatPHP\libs\config\Config::load('database');
    $drive = ucfirst($config['type']);
    $cls = '\TinyCatPHP\libs\db\drive\\' . $drive;
    if (!class_exists($cls))
        throw  new \TinyCatPHP\exception\SysException('没有合适的数据库驱动');
    if (!isset($driveIns[$drive])) {
        $driveIns[$drive] = new $cls($config);
    }
    $driveIns[$drive]->setTable($table);
    return $driveIns[$drive];
}